package persistencia.operaciones;

import java.util.LinkedList;
import java.util.List;

import persistencia.homes.FestivalHome;
import persistencia.homes.GiraHome;
import artistas.ArtistaMusical;
import auxiliares.Date;
import espectaculos.Festival;
import espectaculos.Gira;

public class ArtistasEnFecha implements Runnable {
    Date fechaObjetivo;

    public ArtistasEnFecha(final Date fechaObjetivo) {
        this.fechaObjetivo = fechaObjetivo;
    }

    @Override
    public void run() {
        List<ArtistaMusical> artistasEnFecha = this.buscarEnFestival(this.fechaObjetivo);
        artistasEnFecha.addAll(this.buscarEnGira(this.fechaObjetivo));
        if(artistasEnFecha.isEmpty()){
        	System.out.println("No hay Artistas que hayan tocado el " + fechaObjetivo +".");
        }else{
        	System.out.println("Los artistas que tuvieron recitales el " + this.fechaObjetivo + " son: \n"
        			+ artistasEnFecha);        	
        }
    }

    private List<ArtistaMusical> buscarEnGira(final Date fecha) {
        List<ArtistaMusical> resultArtistas = new LinkedList<ArtistaMusical>();
        List<Gira> giras = GiraHome.listAll();
        for (Gira gira : giras) {
            if (gira.tocoEnFecha(fecha)) {
                resultArtistas.add(gira.getArtista());
            }
        }
        return resultArtistas;
    }

    private List<ArtistaMusical> buscarEnFestival(final Date fecha) {
        List<ArtistaMusical> resultArtistas = new LinkedList<ArtistaMusical>();
        List<Festival> festivales = FestivalHome.listAll();
        for (Festival festival : festivales) {
            if (festival.getRecital().getFecha().equals(fecha)) {
                resultArtistas.addAll(festival.getArtistas());
            }
        }
        return resultArtistas;
    }

    public static void main(final String[] args) {
        new ArtistasEnFecha(new Date(28, 4, 1990)).run();
    }
}
